from PyQt5.Qt import*
from resource.papermanagement import Ui_Form
from mytool import sqlite3Class, calculate_nums_vals

class paperManagePane(QDialog, Ui_Form):

    setdefault_signal = pyqtSignal()
    delete_testpaper = pyqtSignal()  # 删除默认题库时发送信号

    def __init__(self, parent = None, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        self.setupUi(self)

        self.db = sqlite3Class("data.db")
        self.init()

    # 初始化本界面
    def init(self):
        self.model = QStandardItemModel()
        self.model.setHorizontalHeaderLabels(["ID", "试卷名称", "适用人员", "专业分类", "题目数", "总分", "创建时间", "时长"])
        self.data = self.db.selectdata("select * from t_shijuan")
        for x in self.data:
            li = []
            sums, scores = calculate_nums_vals(x[4], x[5], 5)
            y = x[:4] + (str(sums), str(scores), x[7], x[8])
            for m in y:
                q = QStandardItem(str(m))
                q.setTextAlignment(Qt.AlignCenter)  # 设置单元格居中显示
                li.append(q)
            self.model.appendRow(li)
        self.tableView.setModel(self.model)           # 绑定数据模型

        # 表格显示设置
        self.tableView.setShowGrid(True)  # 显示网格线
        self.tableView.horizontalHeader().setStretchLastSection(True)                   # 水平方向表格拉伸满
        # self.tableView.horizontalHeader().setSectionResizeMode(0, QHeaderView.Fixed)
        # self.tableView.setColumnWidth(0, 40)                                          # 设置列宽，此处设置拉伸，无效
        self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)     # 水平方向，表格大小拓展到适当的尺寸
        self.tableView.verticalHeader().setVisible(False)                               # 隐藏第一列
        self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows)               # 设置表格的选取方式是行选取
        self.tableView.setSelectionMode(QAbstractItemView.SingleSelection)              # 设置选取方式为单个选取
        # self.tableView.setSortingEnabled(True)                                          # 排序功能


    # todo tableview槽函数，选中行操作
    def row_selected(self, modelIndex):
        if modelIndex.row() > -1:
            self.pushButton_2.setEnabled(True)
        else:
            self.pushButton_2.setEnabled(False)

    # todo 删除试卷
    def deleterow(self):
        indexs = self.tableView.selectionModel().selection().indexes()
        if len(indexs) > 0:
            if QMessageBox.Yes == QMessageBox.question(self, "删除", "是否删除试卷->" + str(indexs[3].data())):
                id = indexs[0].data()
                self.db.excuteSql("delete from t_shijuan where ID='{}'".format(id))
                self.model.removeRows(indexs[0].row(), 1)       # 从指定行索引开始删除指定行数，此处1行
                self.delete_testpaper.emit()
            self.tableView.setCurrentIndex(QModelIndex())  # 设置当前不选中行
            self.pushButton_2.setEnabled(False)

    # todo 设置默认试卷
    def setdefault(self):
        indexs = self.tableView.selectionModel().selection().indexes()
        if len(indexs)>0:
            id = indexs[0].data()
            self.db.excuteSql("update t_setting set testinfo='{}' where ID='1'".format(id))
            QMessageBox.about(self, "设置默认试卷", "设置成功！")

            # 设置默认后，行不选中，按钮不可用
            self.tableView.setCurrentIndex(QModelIndex())   # 设置当前不选中行
            self.pushButton_2.setEnabled(False)
            self.setdefault_signal.emit()

    # 清空所有试卷
    def clearpaper(self):
        if QMessageBox.question(self, "清空试卷", "确定清空题库吗？清空后不可恢复！") == QMessageBox.Yes:
            # 清空所有试卷
            self.model.removeRows(0, self.model.rowCount())
            self.db.excuteSql("delete from t_shijuan")
            self.db.excuteSql("update t_setting set testinfo = '' where ID='1'")
            self.delete_testpaper.emit()
        else:
            pass

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    win = paperManagePane()
    win.show()
    sys.exit(app.exec_())